#!/bin/bash

# libnl GCC 编译脚本
# 注意：此脚本需要在WSL(Linux子系统)或Linux环境下运行
# 编译 x86_64 版本的 libnl 库

echo "开始编译 libnl (GCC) ..."

# 设置变量
LIB_VERSION="3.7.0"
LIB_NAME="libnl-$LIB_VERSION"
TARBALL="$LIB_NAME.tar.gz"
# 兼容Windows路径处理
SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
OUTPUT_DIR="$SCRIPT_DIR/output"

# 创建输出目录
mkdir -p "$OUTPUT_DIR"

# 下载源码
if [ ! -f "$TARBALL" ]; then
    echo "下载 libnl-$LIB_VERSION 源码..."
    # 尝试使用GitHub源
    wget -c "https://github.com/thom311/libnl/releases/download/libnl3_7_0/$TARBALL" -O "$TARBALL"
    if [ $? -ne 0 ]; then
        echo "备用下载..."
        # 尝试使用kernel.org源
        wget -c "https://www.kernel.org/pub/linux/libs/netlink/$TARBALL" -O "$TARBALL"
        if [ $? -ne 0 ]; then
            echo "下载失败，请检查网络连接或手动下载$TARBALL到当前目录"
            exit 1
        fi
    fi
fi

# 解压源码
if [ ! -d "$LIB_NAME" ]; then
    echo "解压源码..."
    tar -xzf "$TARBALL"
    if [ $? -ne 0 ]; then
        echo "解压失败，请检查压缩包是否完整"
        exit 1
    fi
fi

# 进入源码目录
cd "$LIB_NAME"

# 清理之前的编译
make clean 2>/dev/null || true
make distclean 2>/dev/null || true

# 配置
CC=gcc \
./configure \
    --prefix="$OUTPUT_DIR" \
    --enable-shared \
    --enable-static \
    --disable-debug \
    --with-pic

if [ $? -ne 0 ]; then
    echo "配置失败，请检查依赖项是否已安装"
    exit 1
fi

# 编译
echo "编译中..."
make -j$(nproc)
if [ $? -ne 0 ]; then
    echo "编译失败"
    exit 1
fi

# 安装
echo "安装中..."
make install
if [ $? -ne 0 ]; then
    echo "安装失败"
    exit 1
fi

# 返回脚本目录
cd $SCRIPT_DIR

# 返回脚本目录
cd "$SCRIPT_DIR"

# 创建 .gitignore 文件（如果不存在）
if [ ! -f ".gitignore" ]; then
    echo "创建 .gitignore 文件..."
    cat > .gitignore << EOF
*.tar.gz
*.tar.bz2
*.tar.xz
*.zip
$LIB_NAME/
output/
*.log
.DS_Store
*.swp
EOF
fi

echo "libnl-$LIB_VERSION 编译安装完成！"
echo "安装目录: $OUTPUT_DIR"
echo "头文件: $OUTPUT_DIR/include"
echo "库文件: $OUTPUT_DIR/lib"